#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 第1行注释可以让这个hello.py文件直接在Unix/Linux/Mac上运行，
# 第2行注释表示.py文件本身使用标准UTF-8编码：
print("#############itertools：用于操作迭代对象的函数#############")
print("#############itertools提供的几个“无限”迭代器：count()函数#############")
import itertools

n = itertools.count(1)
# for i in n:
#     print(i)
# count()会创建一个无限的迭代器，所以上述代码会打印出自然数序列，根本停不下来，只能按Ctrl+C退出
print("#############cycle()会把传入的一个序列无限重复下去#############")
n = itertools.cycle("abcdefg")
# for i in n:
#     print(i)
print("#############repeat()负责把一个元素无限重复下去，不过如果提供第二个参数就可以限定重复次数：#############")
n = itertools.repeat('呵呵', 7)
# for i in n:
#     print(i)
# 无限序列只有在for迭代时才会无限地迭代下去，如果只是创建了一个迭代对象，它不会事先把无限个元素生成出来，事实上也不可能在内存中创建无限多个元素。
# 无限序列虽然可以无限迭代下去，但是通常我们会通过takewhile()等函数根据条件判断来截取出一个有限的序列：
print("#############takewhile()等函数根据条件判断来截取出一个有限的序列#############")
natuals = itertools.count(1)
ns = itertools.takewhile(lambda x: x <= 10, natuals)
print(list(ns))
print("#############chain()可以把一组迭代对象串联起来，形成一个更大的迭代器#############")
word = itertools.chain("ABCDeFG", 'HIJKLMN')
# for w in word:
#     print(w)
print("#############groupby()把迭代器中相邻的重复元素挑出来放在一起#############")
for key, group in itertools.groupby('AAABBBCCAAA'):
    print(key, list(group))
print("#############groupby()把迭代器中相邻的重复元素挑出来放在一起：忽略大小写#############")
for key, group in itertools.groupby('AaaBBbcCAAa', lambda c: c.upper()):
    print(key, list(group))
